/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica.Controladoras.Plantaciones;

import Logica.Core.MateriaPrima.YerbaPropia;
import Logica.Core.Plantaciones.Parcela;
import Logica.Core.Plantaciones.Plantacion;
import Persistencia.ControladoraPersistencia;
import Persistencia.JPAControllers.exceptions.NonexistentEntityException;
import Persistencia.JPAControllers.exceptions.PreexistingEntityException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Daniel
 */
public final class ControladoraLogicaPlantaciones {

    protected ControladoraPersistencia miControladora;
    private List<Plantacion> misPlantaciones = new LinkedList<>();
    private List<Parcela> misParcelas = new LinkedList<>();

    public ControladoraLogicaPlantaciones(ControladoraPersistencia miControladora) {
        this.miControladora = miControladora;


        misPlantaciones = dameMisPlantacions();
        misParcelas = dameMisParcelas();
    }

    // <editor-fold defaultstate="collapsed" desc="Clase Plantacion">
    public void crearPlantacion(String nombre, String lugar, String propietario, boolean propio, List<Parcela> misParcelas) throws PreexistingEntityException, Exception {

        misPlantaciones = dameMisPlantacions();
        int nroPlantacion = misPlantaciones.size();
        boolean encontro = false;
        Plantacion miNuevaPlantacion = new Plantacion(nroPlantacion, nombre, lugar, propietario, propio, misParcelas);


        for (int i = 0; i < misPlantaciones.size() && !encontro; i++) {
            Plantacion miPlantacion = misPlantaciones.get(i);
            if (miPlantacion.getId() == nroPlantacion) {
                encontro = true;
                throw new PreexistingEntityException("Plantacion ya Existente.");
            }
        }

        misPlantaciones.add(miNuevaPlantacion);
        miControladora.getMiPersistenciaPlantacion().crearPlantacion(miNuevaPlantacion);
    }

    public void eliminarPlantacion(int nro) throws NonexistentEntityException, Exception {
        misPlantaciones = dameMisPlantacions();
        boolean encontro = false;
        Plantacion miPlantacion = null;

        for (int i = 0; i < misPlantaciones.size() && !encontro; i++) {
            miPlantacion = misPlantaciones.get(i);
            if (miPlantacion.getId() == nro) {
                encontro = true;
                misPlantaciones.remove(i);
            }
        }

        miControladora.getMiPersistenciaPlantacion().eliminarPlantacion(nro);
    }

    public void modificarPlantacion(int nro, String nombre, String lugar, String propietario, boolean propio, List<Parcela> misParcelas) throws NonexistentEntityException, Exception {
        misPlantaciones = dameMisPlantacions();
        int pos = 0;
        boolean encuenetraPlantacion = false;
        Plantacion miPlantacion = null;

        for (int i = 0; i < misPlantaciones.size() && !encuenetraPlantacion; i++) {
            miPlantacion = misPlantaciones.get(i);
            if (miPlantacion.getId() == nro) {
                pos = i;
                encuenetraPlantacion = true;
            }
        }

        miPlantacion.setNombre(nombre);
        miPlantacion.setLugar(lugar);
        miPlantacion.setMisParcelas(misParcelas);
        miPlantacion.setPropietario(propietario);
        miPlantacion.setPropio(propio);

        misPlantaciones.set(pos, miPlantacion);
        miControladora.getMiPersistenciaPlantacion().modificarPlantacion(miPlantacion);
    }

    public Plantacion dameUnPlantacion(int nro) {
        misPlantaciones = dameMisPlantacions();
        boolean encontro = false;
        Plantacion miPlantacion = null;

        for (int i = 0; i < misPlantaciones.size() && !encontro; i++) {
            miPlantacion = misPlantaciones.get(i);
            if (miPlantacion.getId() == nro) {
                encontro = true;
            }
        }

        return miPlantacion;
    }

    public List<Plantacion> dameMisPlantacions() {
        misPlantaciones = miControladora.getMiPersistenciaPlantacion().dameMisPlantacion();
        return misPlantaciones;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Clase Parcelas">
    public void crearParcela(double area, Plantacion miPlantacion, List<YerbaPropia> misYerbas) throws PreexistingEntityException, Exception {

        misParcelas = dameMisParcelas();
        int nroParcela = misParcelas.size();
        boolean encontro = false;
        Parcela miNuevoParcela = new Parcela(nroParcela, area, miPlantacion, misYerbas);


        for (int i = 0; i < misParcelas.size() && !encontro; i++) {
            Parcela miParcela = misParcelas.get(i);
            if (miParcela.getNro()== nroParcela) {
                encontro = true;
                throw new PreexistingEntityException("Parcela ya Existente.");
            }
        }

        misParcelas.add(miNuevoParcela);
        miControladora.getMiPersistenciaParcela().crearParcela(miNuevoParcela);
    }

    public void eliminarParcela(int nro) throws NonexistentEntityException, Exception {
        misParcelas = dameMisParcelas();
        boolean encontro = false;
        Parcela miParcela = null;

        for (int i = 0; i < misParcelas.size() && !encontro; i++) {
            miParcela = misParcelas.get(i);
            if (miParcela.getNro() == nro) {
                encontro = true;
                misParcelas.remove(i);
            }
        }

        miControladora.getMiPersistenciaParcela().eliminarParcela(nro);
    }

    public void modificarParcela(int nro,double area, Plantacion miPlantacion, List<YerbaPropia> misYerbas) throws NonexistentEntityException, Exception {
        misParcelas = dameMisParcelas();
        int pos = 0;
        boolean encuenetraParcela = false;
        Parcela miParcela = null;

        for (int i = 0; i < misParcelas.size() && !encuenetraParcela; i++) {
            miParcela = misParcelas.get(i);
            if (miParcela.getNro() == nro) {
                pos = i;
                encuenetraParcela = true;
            }
        }

        miParcela.setArea(area);
        miParcela.setMiPlantacion(miPlantacion);
        miParcela.setMisYerbas(misYerbas);


        misParcelas.set(pos, miParcela);
        miControladora.getMiPersistenciaParcela().modificarParcela(miParcela);
    }

    public Parcela dameUnParcela(int nro) {
        misParcelas = dameMisParcelas();
        boolean encontro = false;
        Parcela miParcela = null;

        for (int i = 0; i < misParcelas.size() && !encontro; i++) {
            miParcela = misParcelas.get(i);
            if (miParcela.getNro() == nro) {
                encontro = true;
            }
        }

        return miParcela;
    }

    public List<Parcela> dameMisParcelas() {
        misParcelas = miControladora.getMiPersistenciaParcela().dameMisParcela();
        return misParcelas;
    }
    // </editor-fold>
}
